#include<iostream>

using namespace std;
const int N=1100,INF=0x3f3f3f3f;
struct node
{
	int f;int w;//父亲和权值
}ufs[N];

int find(int x)
{
	if(ufs[x].f==x)
	{
		return x;
	}
	int p=ufs[x].f;
	int r=find(ufs[x].f);
	ufs[x].w=(ufs[x].w+ufs[p].w)%2;
	ufs[x].f=r;
	return r;
}

void un(int x,int y,int w)
{
	int fx=find(x);
	int fy=find(y);
	if(fx!=fy)
	{
		ufs[fx].f=fy;
		ufs[fx].w=(w+ufs[y].w-ufs[x].w)&1;
	}
}

int query(int x,int y)
{
	int fx=find(x);
	int fy=find(y);

	if(fx!=fy) return INF;
	return ufs[y].w^ufs[x].w;
}

int main()
{
	int n,m;cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		ufs[i].f=i;
		ufs[i].w=0;
	}

	for(int i=1;i<=m;i++)
	{
		char flag;cin>>flag;
		int p,q;cin>>p>>q;

		if(flag=='E')
		{
			un(p,q,1);
		}
		else
		{
			un(p,q,0);
		}
	}
	int x, y;
	while(cin>>x>>y)
	{
		int k=query(x,y);
		if(k==INF)
		{
			cout<<3<<endl;
		}
		else if(k==0)
		{
			cout<<0<<endl;
		}
		else
		{
			cout<<1<<endl;
		}
	}
}